/**
 * Created with CLion.
 * Description:
 * User: loong
 * Date: 2024/3/10
 * Time: 16:54
 */
#include <IPluginManager.h>
#include <QtWidgets>
#include <glog/logging.h>
#include <string>

using namespace CES::Core;
using namespace std;
using namespace google;

void SignalHandler(const char * data, size_t size)
{
    std::string str(data, size);
    LOG(ERROR) << str;
}

void InitCrash(char * _execPath)
{
    FLAGS_logtostderr               = false;// 设置日志消息是否转到标准输出而不是日志文件
    FLAGS_logtostdout               = false;// 设置日志消息是否转到标准输出而不是日志文件
    FLAGS_alsologtostderr           = false;// 设置日志消息除了日志文件之外是否去标准输出
    FLAGS_colorlogtostderr          = false; // 设置记录到标准输出的颜色消息（如果终端支持）
    FLAGS_log_prefix                = false;// 设置日志前缀是否应该添加到每行输出
    FLAGS_logbufsecs                = 0;    // 设置可以缓冲日志的最大秒数，0指实时输出
    FLAGS_max_log_size              = 3;    // 设置最大日志文件大小（以MB为单位）
    FLAGS_stop_logging_if_full_disk = true; // 设置是否在磁盘已满时避免日志记录到磁盘

    SetLogDestination(google::GLOG_INFO, "log/INF-");
    SetLogDestination(google::GLOG_WARNING, "log/WAR-");
    SetLogDestination(google::GLOG_ERROR, "log/ERR-");
    SetLogDestination(google::GLOG_FATAL, "log/FAT-");
    InstallFailureSignalHandler();
    InstallFailureWriter(&SignalHandler);
    InitGoogleLogging(_execPath);
}

int main(int argc, char * argv[])
{
    QApplication a(argc, argv);

    InitCrash(argv[0]);

    auto pluginManager = IPluginManager::GetInstance();

    pluginManager->SetPluginPaths({QCoreApplication::applicationDirPath() + "/plugin"});
    pluginManager->LoadPlugins();

    return QApplication::exec();
}